package Q17_08_Circus_Tower;
import java.util.ArrayList;
import java.util.*;
public class QuestionOld {
// Returns longer sequence
private static ArrayList<HtWt> seqWithMaxLength(ArrayList<HtWt> seq1, ArrayList<HtWt> seq2) {
if (seq1 == null) {
return seq2;
} else if (seq2 == null) {
return seq1;
}
return seq1.size() > seq2.size() ? seq1 : seq2;
}
private static void longestIncreasingSubsequence(ArrayList<HtWt> array, ArrayList<ArrayList<HtWt>> solutions, int current_index) {
if (current_index >= array.size() || current_index < 0) {
return;
}
HtWt current_element = array.get(current_index);
// Find longest sequence that we can append current_element to
ArrayList<HtWt> best_sequence = null;
for (int i = 0; i < current_index; i++) {
if (array.get(i).isBefore(current_element)) { // If current_element is bigger than list tail
best_sequence = seqWithMaxLength(best_sequence, solutions.get(i)); // Set best_sequence to our new max
}
}
// Append current_element
ArrayList<HtWt> new_solution = new ArrayList<HtWt>();
if (best_sequence != null) {
new_solution.addAll(best_sequence);
}
new_solution.add(current_element);
// Add to list and recurse
solutions.add(current_index, new_solution);
longestIncreasingSubsequence(array, solutions, current_index + 1);
}
public static ArrayList<HtWt> longestIncreasingSeq(ArrayList<HtWt> array) {
Collections.sort(array);
ArrayList<ArrayList<HtWt>> solutions = new ArrayList<ArrayList<HtWt>>();
longestIncreasingSubsequence(array, solutions, 0);
ArrayList<HtWt> best_sequence = null;
for (int i = 0; i < array.size(); i++) {
best_sequence = seqWithMaxLength(best_sequence, solutions.get(i));
}
return best_sequence;
}
public static ArrayList<HtWt> initialize() {
ArrayList<HtWt> items = new ArrayList<HtWt>();
HtWt item = new HtWt(65, 60);
items.add(item);
item = new HtWt(70, 150);
items.add(item);
item = new HtWt(56, 90);
items.add(item);
item = new HtWt(75, 190);
items.add(item);
item = new HtWt(60, 95);
items.add(item);
item = new HtWt(68, 110);
items.add(item);
item = new HtWt(35, 65);
items.add(item);
item = new HtWt(40, 60);
items.add(item);
item = new HtWt(45, 63);
items.add(item);
return items;
}
public static void printList(ArrayList<HtWt> list) {
for (HtWt item : list) {
System.out.println(item.toString() + " ");
}
}
public static void main(String[] args) {
ArrayList<HtWt> items = initialize();
ArrayList<HtWt> solution = longestIncreasingSeq(items);
printList(solution);
}
}